package com.lion.hbase.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 时间处理类
 * 
 * @author 李永曜 2015年6月17日
 */
public class TimeUtil {
	private static final Log LOG = LogFactory.getLog(TimeUtil.class);
	/**
	 * 格式化工具
	 */
	private static final SimpleDateFormat SDF = new SimpleDateFormat();

	/**
	 * 使用指定format格式化时间
	 * 
	 * @param date
	 * @param format
	 * @return
	 */
	public static String getDateString(Date date, Format format) {
		SDF.applyPattern(format.text);
		return SDF.format(date);
	}

	/**
	 * 使用指定format 字符串格式化时间
	 * 
	 * @param date
	 * @param format
	 * @return
	 */
	public static String getDateString(Date date, String format) {
		SDF.applyPattern(format);
		return SDF.format(date);
	}

	/**
	 * 通过字符串及格式获得时间对象
	 * 
	 * @param dateString
	 * @param format
	 * @return
	 */
	public static Date parseDateString(String dateString, Format format) {
		SDF.applyPattern(format.text);
		try {
			return SDF.parse(dateString);
		} catch (ParseException e) {
			LOG.error(e,e);
		}
		return null;
	}

	/**
	 * 通过字符串及格式获得时间对象
	 * 
	 * @param dateString
	 * @param format
	 * @return
	 */
	public static Date parseDateString(String dateString, String formatPattern) {
		SDF.applyPattern(formatPattern);
		try {
			return SDF.parse(dateString);
		} catch (ParseException e) {
			LOG.error(e,e);
		}
		return null;
	}

	/**
	 * 判断当前时间是否在指定时间段内
	 * 
	 * @param startTime
	 *            开始时间
	 * @param overTime
	 *            结束时间
	 * @return true,在;false,不在
	 */
	public static boolean isWithinBetweenDate(Date startTime, Date overTime) {
		long nowTimeLong = new Date().getTime();
		long ckStartTimeLong = startTime.getTime();
		long ckOverTimeLong = overTime.getTime();
		if (nowTimeLong > ckStartTimeLong && nowTimeLong < ckOverTimeLong) {
			return true;
		}
		return false;
	}

	/**
	 * 格式枚举
	 * 
	 * @author 李永曜 2015年6月17日
	 */
	public enum Format {

		SHORT("yyMMdd"), DATE("yyyy-MM-dd"), DATENOLINE("yyyyMMdd"), DATETIME(
				"yyyy-MM-dd HH:mm:ss"), DATETIME1("yyyyMMddHHmmss");

		private String text;

		private Format(String text) {
			this.text = text;
		}

		public String getText() {
			return text;
		}

		public void setText(String text) {
			this.text = text;
		}

	}
}
